요약

  1. gpd.overlay(A, B, how = '옵션'): 공간자료들의 위치를 기반으로 새로운 도형을 생성
  2. A의 geometry가 기준
  3. union: 합집합
  4. intersection: 교집합
  5. symmetric_difference: 대칭차집합 (교집합과 반대)
  6. difference: 차집합 A(기준) - B
  7. identity: 교집합(intersection) + 차집합(difference)

1. overlay

목적

  • geopandas.GeoDataFrame.overlay(): GeoDataFrame 객체에 대한 메소드
  • 공간자료들의 위치 정보들을 고려하여 겹치거나 겹치지 않는 위치를 기반으로 새로운 도형을 만들 때 사용한다.
  • 단, gpd.overlay(A, B) 두 도형의 속성이 모두 유지된다. 즉 공간 결합시 좌측 공간데이터를 기준 공간 정보에 우측 공간데이터의 속성들이 결합됨 - 즉, A안에 B가 담기며, 이를 통해 집계함수 사용시 A 공간 단위로 집계 가능
  • how 옵션을 통해 다양한 공간 결합 활용
  • output: GeoDataFrame

아래와 같이 GeoDataFrame 형태인 gdf1, gdf2 2개의 공간 자료가 있으며, 각각 1과 2의 속성 정보를 담고 있다.

1.1 union

( 합집합) 가능한 모든 기하학 정보를 반환

  • 각 공간자료별 겹치는지 겹치지 않는 지에 대한 모든 정보를 반환
  • 위 예시자료를 기준으로 4개의 공간객체가 있으니, 4 x 2 - 1= 7 개의 속성 정보를 반환한다.
    • 공집합 제외
result_union = gdf1.overlay(gdf2, how = 'union')
print(result_union)
gdf1gdf2
11
21
22
1NaN
2NaN
NaN1
NaN2

1.2 intersection

( 교집합) 공간 자료 중 겹치는 객체만 반환

  • NaN이 하나라도 아닌 조합을 반환
result_intersection = gdf1.overlay(gdf2, how = 'intersection')
print(resut_intersection)
gdf1gdf2
11
21
22

1.3 symmertric_difference

( 대칭차집합) 겹치지 않는 객체만 반환(intersection의 반대)

  • 즉, Union 한 결과에서 interssection 를 뺀 나머지
  • 주의! difference 와 다름
result_sym_diff = gdf1.overlay(gdf2, how = 'symmetric_difference')
print(result_sym_diff)
gdf1gdf2
1NaN
2NaN
NaN1
NaN2

1.4 difference

( 차집합) 기준이 되는 객체에서 특정 객체를 제외한 나머지

  • 대칭차집합(symmetric_difference) 와의 차이점
    • 대칭차집합은 전체에서 교집합을 제외한 나머지
    • 차집합은 기준 객체에서 특정 객체를 전부 제외한 나머지
result_diff = gdf1.overlay(gdf2, how = 'difference')
print(result_diff)
gdf1gdf2
1NaN
2NaN
![[geopandas overlay-difference.png500x500]]

1.5 identity

기준이 되는 객체만 반환하지만 겹치는 객체와 그렇지 않은 객체를 구분해서 반환

  • 즉, identity는 교집합(intersection)과 차집합(difference)의 합이다.
result_identity = gdf1.overlay(gdf2, how = 'identity')
print(result_identity)
gdf1gdf2
11
21
22
1NaN
2NaN
![[geopandas overlay-identity.png500x500]]

2. overlaps


3. sjoin


참고사이트

from shapely.geometry import MultiPolygon

공간결합

intersection(교차)

개념

  • 두 GeoDataFrame의 지오메트리를 겹치는 부분 조합
  • gpd.overlay(A, B): A geomerty 별로 속한 B의 geometry들이 들어감
    • 즉, A안에 B가 담김
    • 이를 통해 집계함수 사용시, A 공간 단위로 집계 가능
  • keep_geom_type : 서로 다른 지오메트리 유형을 가진 객체 보존여부
    • True: 서로 다른 유형 지오메트리 제거 > 경고메시지 발생 가능
    • False: 모든 지오메트리 유지
gpd.overlay(A, B, how='intersection', keep_geom_type = False)